package com.ruoyi.common.utils;

import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.Map;

public class GycdHelper {

    public static String convert2html(String json) {
        List<Map> list = JsonUtil.toListObject(json, Map.class);
        if (CollectionUtils.isEmpty(list)) {
            return null;
        }
        StringBuffer sb = new StringBuffer();

        for (Map map : list) {
            String py = "";
            if (map.containsKey("py")) {
                py = map.get("py").toString().trim();
            }
            if (map.containsKey("items")) {
                List<Map> items = (List<Map>) map.get("items");
                for (Map item : items) {
                    sb.append(renderItem(item, py));
                }
            }
        }

        return sb.toString();
    }

    private static String renderItem(Map map, String py) {
        StringBuffer sb = new StringBuffer();
        sb.append("<p class=f>");
        if (!StringUtils.isEmpty(py)) {
            sb.append("<span class=py>" + py + "</span>");
        }
        if (map.containsKey("attr")) {
            String attr = map.get("attr").toString();
            sb.append("<b class=attr>" + attr + "</b>");
        }
        sb.append("</p>");

        sb.append("<ul>");
        if (map.containsKey("explains")) {
            List<Map> explains = (List<Map>) map.get("explains");
            for (Map explain : explains) {
                sb.append(renderExplain(explain));
            }
        }
        sb.append("</ul>");

        return sb.toString();
    }

    private static String renderExplain(Map map) {
        StringBuffer sb = new StringBuffer();
        sb.append("<li>");
        String explain = "";
        if (map.containsKey("explain")) {
            explain = map.get("explain").toString();
        }
        sb.append("<u>" + explain + "</u>");
        if (map.containsKey("examples")) {
            List<String> examples = (List<String>) map.get("examples");
            for (String example : examples) {
                sb.append("<p class=sub>" + example + "</p>");
            }
        }
        if (map.containsKey("quotes")) {
            List<String> quotes = (List<String>) map.get("quotes");
            for (String quote : quotes) {
                sb.append("<p class=sub>" + quote + "</p>");
            }
        }
        sb.append("</li>");
        return sb.toString();
    }

    public static void main(String[] args) {
        String json = "[{\"zi\":\"中\",\"yy\":\"ㄓㄨㄥ\",\"py\":\"zhōng  \",\"items\":[{\"attr\":\"名\",\"explains\":[{\"explain\":\"距离四方或两端相等的部位。\",\"examples\":[\"如：「居中」、「中央」、「日正当中」。\"],\"quotes\":[]},{\"explain\":\"内、里面。\",\"examples\":[\"如：「水中」、「梦中」、「心中」。\"],\"quotes\":[]},{\"explain\":\"泛指某一时期以内。\",\"examples\":[\"如：「一年之中」、「晋太元中」。\"],\"quotes\":[]},{\"explain\":\"中华人民共和国的简称。\",\"examples\":[],\"quotes\":[]},{\"explain\":\"姓。如汉代有中京。\",\"examples\":[],\"quotes\":[]}]},{\"attr\":\"形\",\"explains\":[{\"explain\":\"居间介绍、连络的。\",\"examples\":[\"如：「中人」。\"],\"quotes\":[]},{\"explain\":\"居于高低、大小、好坏之间的。\",\"examples\":[\"如：「中级」、「中型」、「中等」。\"],\"quotes\":[]},{\"explain\":\"半。\",\"examples\":[\"如：「中夜」、「中途」。\"],\"quotes\":[]}]},{\"attr\":\"副\",\"explains\":[{\"explain\":\"正好。\",\"examples\":[\"如：「适中」。\"],\"quotes\":[]},{\"explain\":\"表示动作正在进行。\",\"examples\":[\"如：「事情正在交涉中。」\"],\"quotes\":[]}]}]},{\"zi\":\"中\",\"yy\":\"ㄓㄨㄥˋ\",\"py\":\"zhòng  \",\"items\":[{\"attr\":\"動\",\"explains\":[{\"explain\":\"达到要点。\",\"examples\":[],\"quotes\":[\"《论语·子路》：「刑罚不中，则民无所错手足。」\",\"《汉书·卷一○·成帝纪》：「朕涉道日寡，举错不中。」\"]},{\"explain\":\"合、正对上。\",\"examples\":[\"如：「中规中矩」。\"],\"quotes\":[\"《左传·定公元年》：「未尝不中吾志也。」\",\"《战国策·西周策》：「去柳叶者百步而射之，百发百中。」\"]},{\"explain\":\"遭受、感染。\",\"examples\":[\"如：「中风」、「中毒」。\"],\"quotes\":[]},{\"explain\":\"得。\",\"examples\":[\"如：「中奖」、「中签」、「中选」。\"],\"quotes\":[]},{\"explain\":\"考取。\",\"examples\":[\"如：「范进中举」、「考中大学」。\"],\"quotes\":[\"《儒林外史·第二回》：「这王大老爷，就是前科新中的。」\"]}]}]}]";
        String html = convert2html(json);
        System.out.println(html);
    }
}
